1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gtk.CellArea;
26 
27 private import gdk.Event;
28 private import glib.ListG;
29 private import glib.Str;
30 private import glib.c.functions;
31 private import gobject.ObjectG;
32 private import gobject.Signals;
33 private import gobject.Value;
34 private import gtk.BuildableIF;
35 private import gtk.BuildableT;
36 private import gtk.CellAreaContext;
37 private import gtk.CellEditableIF;
38 private import gtk.CellLayoutIF;
39 private import gtk.CellLayoutT;
40 private import gtk.CellRenderer;
41 private import gtk.Snapshot;
42 private import gtk.TreeIter;
43 private import gtk.TreeModelIF;
44 private import gtk.Widget;
45 private import gtk.c.functions;
46 public  import gtk.c.types;
47 private import std.algorithm;
48 
49 
50 /**
51  * An abstract class for laying out `GtkCellRenderer`s
52  * 
53  * The `GtkCellArea` is an abstract class for [iface@Gtk.CellLayout]
54  * widgets (also referred to as "layouting widgets") to interface with
55  * an arbitrary number of [class@Gtk.CellRenderer]s and interact with the user
56  * for a given [iface@Gtk.TreeModel] row.
57  * 
58  * The cell area handles events, focus navigation, drawing and
59  * size requests and allocations for a given row of data.
60  * 
61  * Usually users dont have to interact with the `GtkCellArea` directly
62  * unless they are implementing a cell-layouting widget themselves.
63  * 
64  * # Requesting area sizes
65  * 
66  * As outlined in
67  * [GtkWidget’s geometry management section](class.Widget.html#height-for-width-geometry-management),
68  * GTK uses a height-for-width
69  * geometry management system to compute the sizes of widgets and user
70  * interfaces. `GtkCellArea` uses the same semantics to calculate the
71  * size of an area for an arbitrary number of `GtkTreeModel` rows.
72  * 
73  * When requesting the size of a cell area one needs to calculate
74  * the size for a handful of rows, and this will be done differently by
75  * different layouting widgets. For instance a [class@Gtk.TreeViewColumn]
76  * always lines up the areas from top to bottom while a [class@Gtk.IconView]
77  * on the other hand might enforce that all areas received the same
78  * width and wrap the areas around, requesting height for more cell
79  * areas when allocated less width.
80  * 
81  * It’s also important for areas to maintain some cell
82  * alignments with areas rendered for adjacent rows (cells can
83  * appear “columnized” inside an area even when the size of
84  * cells are different in each row). For this reason the `GtkCellArea`
85  * uses a [class@Gtk.CellAreaContext] object to store the alignments
86  * and sizes along the way (as well as the overall largest minimum
87  * and natural size for all the rows which have been calculated
88  * with the said context).
89  * 
90  * The [class@Gtk.CellAreaContext] is an opaque object specific to the
91  * `GtkCellArea` which created it (see [method@Gtk.CellArea.create_context]).
92  * 
93  * The owning cell-layouting widget can create as many contexts as
94  * it wishes to calculate sizes of rows which should receive the
95  * same size in at least one orientation (horizontally or vertically),
96  * However, it’s important that the same [class@Gtk.CellAreaContext] which
97  * was used to request the sizes for a given `GtkTreeModel` row be
98  * used when rendering or processing events for that row.
99  * 
100  * In order to request the width of all the rows at the root level
101  * of a `GtkTreeModel` one would do the following:
102  * 
103  * ```c
104  * GtkTreeIter iter;
105  * int minimum_width;
106  * int natural_width;
107  * 
108  * valid = gtk_tree_model_get_iter_first (model, &iter);
109  * while (valid)
110  * {
111  * gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE);
112  * gtk_cell_area_get_preferred_width (area, context, widget, NULL, NULL);
113  * 
114  * valid = gtk_tree_model_iter_next (model, &iter);
115  * }
116  * 
117  * gtk_cell_area_context_get_preferred_width (context, &minimum_width, &natural_width);
118  * ```
119  * 
120  * Note that in this example it’s not important to observe the
121  * returned minimum and natural width of the area for each row
122  * unless the cell-layouting object is actually interested in the
123  * widths of individual rows. The overall width is however stored
124  * in the accompanying `GtkCellAreaContext` object and can be consulted
125  * at any time.
126  * 
127  * This can be useful since `GtkCellLayout` widgets usually have to
128  * support requesting and rendering rows in treemodels with an
129  * exceedingly large amount of rows. The `GtkCellLayout` widget in
130  * that case would calculate the required width of the rows in an
131  * idle or timeout source (see [func@GLib.timeout_add]) and when the widget
132  * is requested its actual width in [vfunc@Gtk.Widget.measure]
133  * it can simply consult the width accumulated so far in the
134  * `GtkCellAreaContext` object.
135  * 
136  * A simple example where rows are rendered from top to bottom and
137  * take up the full width of the layouting widget would look like:
138  * 
139  * ```c
140  * static void
141  * foo_get_preferred_width (GtkWidget *widget,
142  * int       *minimum_size,
143  * int       *natural_size)
144  * {
145  * Foo *self = FOO (widget);
146  * FooPrivate *priv = foo_get_instance_private (self);
147  * 
148  * foo_ensure_at_least_one_handfull_of_rows_have_been_requested (self);
149  * 
150  * gtk_cell_area_context_get_preferred_width (priv->context, minimum_size, natural_size);
151  * }
152  * ```
153  * 
154  * In the above example the `Foo` widget has to make sure that some
155  * row sizes have been calculated (the amount of rows that `Foo` judged
156  * was appropriate to request space for in a single timeout iteration)
157  * before simply returning the amount of space required by the area via
158  * the `GtkCellAreaContext`.
159  * 
160  * Requesting the height for width (or width for height) of an area is
161  * a similar task except in this case the `GtkCellAreaContext` does not
162  * store the data (actually, it does not know how much space the layouting
163  * widget plans to allocate it for every row. It’s up to the layouting
164  * widget to render each row of data with the appropriate height and
165  * width which was requested by the `GtkCellArea`).
166  * 
167  * In order to request the height for width of all the rows at the
168  * root level of a `GtkTreeModel` one would do the following:
169  * 
170  * ```c
171  * GtkTreeIter iter;
172  * int minimum_height;
173  * int natural_height;
174  * int full_minimum_height = 0;
175  * int full_natural_height = 0;
176  * 
177  * valid = gtk_tree_model_get_iter_first (model, &iter);
178  * while (valid)
179  * {
180  * gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE);
181  * gtk_cell_area_get_preferred_height_for_width (area, context, widget,
182  * width, &minimum_height, &natural_height);
183  * 
184  * if (width_is_for_allocation)
185  * cache_row_height (&iter, minimum_height, natural_height);
186  * 
187  * full_minimum_height += minimum_height;
188  * full_natural_height += natural_height;
189  * 
190  * valid = gtk_tree_model_iter_next (model, &iter);
191  * }
192  * ```
193  * 
194  * Note that in the above example we would need to cache the heights
195  * returned for each row so that we would know what sizes to render the
196  * areas for each row. However we would only want to really cache the
197  * heights if the request is intended for the layouting widgets real
198  * allocation.
199  * 
200  * In some cases the layouting widget is requested the height for an
201  * arbitrary for_width, this is a special case for layouting widgets
202  * who need to request size for tens of thousands  of rows. For this
203  * case it’s only important that the layouting widget calculate
204  * one reasonably sized chunk of rows and return that height
205  * synchronously. The reasoning here is that any layouting widget is
206  * at least capable of synchronously calculating enough height to fill
207  * the screen height (or scrolled window height) in response to a single
208  * call to [vfunc@Gtk.Widget.measure]. Returning
209  * a perfect height for width that is larger than the screen area is
210  * inconsequential since after the layouting receives an allocation
211  * from a scrolled window it simply continues to drive the scrollbar
212  * values while more and more height is required for the row heights
213  * that are calculated in the background.
214  * 
215  * # Rendering Areas
216  * 
217  * Once area sizes have been acquired at least for the rows in the
218  * visible area of the layouting widget they can be rendered at
219  * [vfunc@Gtk.Widget.snapshot] time.
220  * 
221  * A crude example of how to render all the rows at the root level
222  * runs as follows:
223  * 
224  * ```c
225  * GtkAllocation allocation;
226  * GdkRectangle cell_area = { 0, };
227  * GtkTreeIter iter;
228  * int minimum_width;
229  * int natural_width;
230  * 
231  * gtk_widget_get_allocation (widget, &allocation);
232  * cell_area.width = allocation.width;
233  * 
234  * valid = gtk_tree_model_get_iter_first (model, &iter);
235  * while (valid)
236  * {
237  * cell_area.height = get_cached_height_for_row (&iter);
238  * 
239  * gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE);
240  * gtk_cell_area_render (area, context, widget, cr,
241  * &cell_area, &cell_area, state_flags, FALSE);
242  * 
243  * cell_area.y += cell_area.height;
244  * 
245  * valid = gtk_tree_model_iter_next (model, &iter);
246  * }
247  * ```
248  * 
249  * Note that the cached height in this example really depends on how
250  * the layouting widget works. The layouting widget might decide to
251  * give every row its minimum or natural height or, if the model content
252  * is expected to fit inside the layouting widget without scrolling, it
253  * would make sense to calculate the allocation for each row at
254  * the time the widget is allocated using [func@Gtk.distribute_natural_allocation].
255  * 
256  * # Handling Events and Driving Keyboard Focus
257  * 
258  * Passing events to the area is as simple as handling events on any
259  * normal widget and then passing them to the [method@Gtk.CellArea.event]
260  * API as they come in. Usually `GtkCellArea` is only interested in
261  * button events, however some customized derived areas can be implemented
262  * who are interested in handling other events. Handling an event can
263  * trigger the [`signal@Gtk.CellArea::focus-changed`] signal to fire; as well
264  * as [`signal@GtkCellArea::add-editable`] in the case that an editable cell
265  * was clicked and needs to start editing. You can call
266  * [method@Gtk.CellArea.stop_editing] at any time to cancel any cell editing
267  * that is currently in progress.
268  * 
269  * The `GtkCellArea` drives keyboard focus from cell to cell in a way
270  * similar to `GtkWidget`. For layouting widgets that support giving
271  * focus to cells it’s important to remember to pass `GTK_CELL_RENDERER_FOCUSED`
272  * to the area functions for the row that has focus and to tell the
273  * area to paint the focus at render time.
274  * 
275  * Layouting widgets that accept focus on cells should implement the
276  * [vfunc@Gtk.Widget.focus] virtual method. The layouting widget is always
277  * responsible for knowing where `GtkTreeModel` rows are rendered inside
278  * the widget, so at [vfunc@Gtk.Widget.focus] time the layouting widget
279  * should use the `GtkCellArea` methods to navigate focus inside the area
280  * and then observe the [enum@Gtk.DirectionType] to pass the focus to adjacent
281  * rows and areas.
282  * 
283  * A basic example of how the [vfunc@Gtk.Widget.focus] virtual method
284  * should be implemented:
285  * 
286  * ```
287  * static gboolean
288  * foo_focus (GtkWidget       *widget,
289  * GtkDirectionType direction)
290  * {
291  * Foo *self = FOO (widget);
292  * FooPrivate *priv = foo_get_instance_private (self);
293  * int focus_row = priv->focus_row;
294  * gboolean have_focus = FALSE;
295  * 
296  * if (!gtk_widget_has_focus (widget))
297  * gtk_widget_grab_focus (widget);
298  * 
299  * valid = gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, priv->focus_row);
300  * while (valid)
301  * {
302  * gtk_cell_area_apply_attributes (priv->area, priv->model, &iter, FALSE, FALSE);
303  * 
304  * if (gtk_cell_area_focus (priv->area, direction))
305  * {
306  * priv->focus_row = focus_row;
307  * have_focus = TRUE;
308  * break;
309  * }
310  * else
311  * {
312  * if (direction == GTK_DIR_RIGHT ||
313  * direction == GTK_DIR_LEFT)
314  * break;
315  * else if (direction == GTK_DIR_UP ||
316  * direction == GTK_DIR_TAB_BACKWARD)
317  * {
318  * if (focus_row == 0)
319  * break;
320  * else
321  * {
322  * focus_row--;
323  * valid = gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, focus_row);
324  * }
325  * }
326  * else
327  * {
328  * if (focus_row == last_row)
329  * break;
330  * else
331  * {
332  * focus_row++;
333  * valid = gtk_tree_model_iter_next (priv->model, &iter);
334  * }
335  * }
336  * }
337  * }
338  * return have_focus;
339  * }
340  * ```
341  * 
342  * Note that the layouting widget is responsible for matching the
343  * `GtkDirectionType` values to the way it lays out its cells.
344  * 
345  * # Cell Properties
346  * 
347  * The `GtkCellArea` introduces cell properties for `GtkCellRenderer`s.
348  * This provides some general interfaces for defining the relationship
349  * cell areas have with their cells. For instance in a [class@Gtk.CellAreaBox]
350  * a cell might “expand” and receive extra space when the area is allocated
351  * more than its full natural request, or a cell might be configured to “align”
352  * with adjacent rows which were requested and rendered with the same
353  * `GtkCellAreaContext`.
354  * 
355  * Use [method@Gtk.CellAreaClass.install_cell_property] to install cell
356  * properties for a cell area class and [method@Gtk.CellAreaClass.find_cell_property]
357  * or [method@Gtk.CellAreaClass.list_cell_properties] to get information about
358  * existing cell properties.
359  * 
360  * To set the value of a cell property, use [method@Gtk.CellArea.cell_set_property],
361  * [method@Gtk.CellArea.cell_set] or [method@Gtk.CellArea.cell_set_valist]. To obtain
362  * the value of a cell property, use [method@Gtk.CellArea.cell_get_property]
363  * [method@Gtk.CellArea.cell_get] or [method@Gtk.CellArea.cell_get_valist].
364  */
365 public class CellArea : ObjectG, BuildableIF, CellLayoutIF
366 {
367 	/** the main Gtk struct */
368 	protected GtkCellArea* gtkCellArea;
369 
370 	/** Get the main Gtk struct */
371 	public GtkCellArea* getCellAreaStruct(bool transferOwnership = false)
372 	{
373 		if (transferOwnership)
374 			ownedRef = false;
375 		return gtkCellArea;
376 	}
377 
378 	/** the main Gtk struct as a void* */
379 	protected override void* getStruct()
380 	{
381 		return cast(void*)gtkCellArea;
382 	}
383 
384 	/**
385 	 * Sets our main struct and passes it to the parent class.
386 	 */
387 	public this (GtkCellArea* gtkCellArea, bool ownedRef = false)
388 	{
389 		this.gtkCellArea = gtkCellArea;
390 		super(cast(GObject*)gtkCellArea, ownedRef);
391 	}
392 
393 	// add the Buildable capabilities
394 	mixin BuildableT!(GtkCellArea);
395 
396 	// add the CellLayout capabilities
397 	mixin CellLayoutT!(GtkCellArea);
398 
399 
400 	/** */
401 	public static GType getType()
402 	{
403 		return gtk_cell_area_get_type();
404 	}
405 
406 	/**
407 	 * Activates @area, usually by activating the currently focused
408 	 * cell, however some subclasses which embed widgets in the area
409 	 * can also activate a widget if it currently has the focus.
410 	 *
411 	 * Params:
412 	 *     context = the `GtkCellArea`Context in context with the current row data
413 	 *     widget = the `GtkWidget` that @area is rendering on
414 	 *     cellArea = the size and location of @area relative to @widget’s allocation
415 	 *     flags = the `GtkCellRenderer`State flags for @area for this row of data.
416 	 *     editOnly = if %TRUE then only cell renderers that are %GTK_CELL_RENDERER_MODE_EDITABLE
417 	 *         will be activated.
418 	 *
419 	 * Returns: Whether @area was successfully activated.
420 	 */
421 	public bool activate(CellAreaContext context, Widget widget, GdkRectangle* cellArea, GtkCellRendererState flags, bool editOnly)
422 	{
423 		return gtk_cell_area_activate(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), cellArea, flags, editOnly) != 0;
424 	}
425 
426 	/**
427 	 * This is used by `GtkCellArea` subclasses when handling events
428 	 * to activate cells, the base `GtkCellArea` class activates cells
429 	 * for keyboard events for free in its own GtkCellArea->activate()
430 	 * implementation.
431 	 *
432 	 * Params:
433 	 *     widget = the `GtkWidget` that @area is rendering onto
434 	 *     renderer = the `GtkCellRenderer` in @area to activate
435 	 *     event = the `GdkEvent` for which cell activation should occur
436 	 *     cellArea = the `GdkRectangle` in @widget relative coordinates
437 	 *         of @renderer for the current row.
438 	 *     flags = the `GtkCellRenderer`State for @renderer
439 	 *
440 	 * Returns: whether cell activation was successful
441 	 */
442 	public bool activateCell(Widget widget, CellRenderer renderer, Event event, GdkRectangle* cellArea, GtkCellRendererState flags)
443 	{
444 		return gtk_cell_area_activate_cell(gtkCellArea, (widget is null) ? null : widget.getWidgetStruct(), (renderer is null) ? null : renderer.getCellRendererStruct(), (event is null) ? null : event.getEventStruct(), cellArea, flags) != 0;
445 	}
446 
447 	/**
448 	 * Adds @renderer to @area with the default child cell properties.
449 	 *
450 	 * Params:
451 	 *     renderer = the `GtkCellRenderer` to add to @area
452 	 */
453 	public void add(CellRenderer renderer)
454 	{
455 		gtk_cell_area_add(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct());
456 	}
457 
458 	/**
459 	 * Adds @sibling to @renderer’s focusable area, focus will be drawn
460 	 * around @renderer and all of its siblings if @renderer can
461 	 * focus for a given row.
462 	 *
463 	 * Events handled by focus siblings can also activate the given
464 	 * focusable @renderer.
465 	 *
466 	 * Params:
467 	 *     renderer = the `GtkCellRenderer` expected to have focus
468 	 *     sibling = the `GtkCellRenderer` to add to @renderer’s focus area
469 	 */
470 	public void addFocusSibling(CellRenderer renderer, CellRenderer sibling)
471 	{
472 		gtk_cell_area_add_focus_sibling(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), (sibling is null) ? null : sibling.getCellRendererStruct());
473 	}
474 
475 	/**
476 	 * Applies any connected attributes to the renderers in
477 	 * @area by pulling the values from @tree_model.
478 	 *
479 	 * Params:
480 	 *     treeModel = the `GtkTreeModel` to pull values from
481 	 *     iter = the `GtkTreeIter` in @tree_model to apply values for
482 	 *     isExpander = whether @iter has children
483 	 *     isExpanded = whether @iter is expanded in the view and
484 	 *         children are visible
485 	 */
486 	public void applyAttributes(TreeModelIF treeModel, TreeIter iter, bool isExpander, bool isExpanded)
487 	{
488 		gtk_cell_area_apply_attributes(gtkCellArea, (treeModel is null) ? null : treeModel.getTreeModelStruct(), (iter is null) ? null : iter.getTreeIterStruct(), isExpander, isExpanded);
489 	}
490 
491 	/**
492 	 * Connects an @attribute to apply values from @column for the
493 	 * `GtkTreeModel` in use.
494 	 *
495 	 * Params:
496 	 *     renderer = the `GtkCellRenderer` to connect an attribute for
497 	 *     attribute = the attribute name
498 	 *     column = the `GtkTreeModel` column to fetch attribute values from
499 	 */
500 	public void attributeConnect(CellRenderer renderer, string attribute, int column)
501 	{
502 		gtk_cell_area_attribute_connect(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), Str.toStringz(attribute), column);
503 	}
504 
505 	/**
506 	 * Disconnects @attribute for the @renderer in @area so that
507 	 * attribute will no longer be updated with values from the
508 	 * model.
509 	 *
510 	 * Params:
511 	 *     renderer = the `GtkCellRenderer` to disconnect an attribute for
512 	 *     attribute = the attribute name
513 	 */
514 	public void attributeDisconnect(CellRenderer renderer, string attribute)
515 	{
516 		gtk_cell_area_attribute_disconnect(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), Str.toStringz(attribute));
517 	}
518 
519 	/**
520 	 * Returns the model column that an attribute has been mapped to,
521 	 * or -1 if the attribute is not mapped.
522 	 *
523 	 * Params:
524 	 *     renderer = a `GtkCellRenderer`
525 	 *     attribute = an attribute on the renderer
526 	 *
527 	 * Returns: the model column, or -1
528 	 */
529 	public int attributeGetColumn(CellRenderer renderer, string attribute)
530 	{
531 		return gtk_cell_area_attribute_get_column(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), Str.toStringz(attribute));
532 	}
533 
534 	/**
535 	 * Gets the value of a cell property for @renderer in @area.
536 	 *
537 	 * Params:
538 	 *     renderer = a `GtkCellRenderer` inside @area
539 	 *     propertyName = the name of the property to get
540 	 *     value = a location to return the value
541 	 */
542 	public void cellGetProperty(CellRenderer renderer, string propertyName, Value value)
543 	{
544 		gtk_cell_area_cell_get_property(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), Str.toStringz(propertyName), (value is null) ? null : value.getValueStruct());
545 	}
546 
547 	/**
548 	 * Gets the values of one or more cell properties for @renderer in @area.
549 	 *
550 	 * Params:
551 	 *     renderer = a `GtkCellRenderer` inside @area
552 	 *     firstPropertyName = the name of the first property to get
553 	 *     varArgs = return location for the first property, followed
554 	 *         optionally by more name/return location pairs, followed by %NULL
555 	 */
556 	public void cellGetValist(CellRenderer renderer, string firstPropertyName, void* varArgs)
557 	{
558 		gtk_cell_area_cell_get_valist(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), Str.toStringz(firstPropertyName), varArgs);
559 	}
560 
561 	/**
562 	 * Sets a cell property for @renderer in @area.
563 	 *
564 	 * Params:
565 	 *     renderer = a `GtkCellRenderer` inside @area
566 	 *     propertyName = the name of the cell property to set
567 	 *     value = the value to set the cell property to
568 	 */
569 	public void cellSetProperty(CellRenderer renderer, string propertyName, Value value)
570 	{
571 		gtk_cell_area_cell_set_property(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), Str.toStringz(propertyName), (value is null) ? null : value.getValueStruct());
572 	}
573 
574 	/**
575 	 * Sets one or more cell properties for @renderer in @area.
576 	 *
577 	 * Params:
578 	 *     renderer = a `GtkCellRenderer` which inside @area
579 	 *     firstPropertyName = the name of the first cell property to set
580 	 *     varArgs = a %NULL-terminated list of property names and values, starting
581 	 *         with @first_prop_name
582 	 */
583 	public void cellSetValist(CellRenderer renderer, string firstPropertyName, void* varArgs)
584 	{
585 		gtk_cell_area_cell_set_valist(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), Str.toStringz(firstPropertyName), varArgs);
586 	}
587 
588 	/**
589 	 * This is sometimes needed for cases where rows need to share
590 	 * alignments in one orientation but may be separately grouped
591 	 * in the opposing orientation.
592 	 *
593 	 * For instance, `GtkIconView` creates all icons (rows) to have
594 	 * the same width and the cells theirin to have the same
595 	 * horizontal alignments. However each row of icons may have
596 	 * a separate collective height. `GtkIconView` uses this to
597 	 * request the heights of each row based on a context which
598 	 * was already used to request all the row widths that are
599 	 * to be displayed.
600 	 *
601 	 * Params:
602 	 *     context = the `GtkCellArea`Context to copy
603 	 *
604 	 * Returns: a newly created `GtkCellArea`Context copy of @context.
605 	 */
606 	public CellAreaContext copyContext(CellAreaContext context)
607 	{
608 		auto __p = gtk_cell_area_copy_context(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct());
609 
610 		if(__p is null)
611 		{
612 			return null;
613 		}
614 
615 		return ObjectG.getDObject!(CellAreaContext)(cast(GtkCellAreaContext*) __p, true);
616 	}
617 
618 	/**
619 	 * Creates a `GtkCellArea`Context to be used with @area for
620 	 * all purposes. `GtkCellArea`Context stores geometry information
621 	 * for rows for which it was operated on, it is important to use
622 	 * the same context for the same row of data at all times (i.e.
623 	 * one should render and handle events with the same `GtkCellArea`Context
624 	 * which was used to request the size of those rows of data).
625 	 *
626 	 * Returns: a newly created `GtkCellArea`Context which can be used with @area.
627 	 */
628 	public CellAreaContext createContext()
629 	{
630 		auto __p = gtk_cell_area_create_context(gtkCellArea);
631 
632 		if(__p is null)
633 		{
634 			return null;
635 		}
636 
637 		return ObjectG.getDObject!(CellAreaContext)(cast(GtkCellAreaContext*) __p, true);
638 	}
639 
640 	/**
641 	 * Delegates event handling to a `GtkCellArea`.
642 	 *
643 	 * Params:
644 	 *     context = the `GtkCellArea`Context for this row of data.
645 	 *     widget = the `GtkWidget` that @area is rendering to
646 	 *     event = the `GdkEvent` to handle
647 	 *     cellArea = the @widget relative coordinates for @area
648 	 *     flags = the `GtkCellRenderer`State for @area in this row.
649 	 *
650 	 * Returns: %TRUE if the event was handled by @area.
651 	 */
652 	public int event(CellAreaContext context, Widget widget, Event event, GdkRectangle* cellArea, GtkCellRendererState flags)
653 	{
654 		return gtk_cell_area_event(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), (event is null) ? null : event.getEventStruct(), cellArea, flags);
655 	}
656 
657 	/**
658 	 * This should be called by the @area’s owning layout widget
659 	 * when focus is to be passed to @area, or moved within @area
660 	 * for a given @direction and row data.
661 	 *
662 	 * Implementing `GtkCellArea` classes should implement this
663 	 * method to receive and navigate focus in its own way particular
664 	 * to how it lays out cells.
665 	 *
666 	 * Params:
667 	 *     direction = the `GtkDirectionType`
668 	 *
669 	 * Returns: %TRUE if focus remains inside @area as a result of this call.
670 	 */
671 	public bool focus(GtkDirectionType direction)
672 	{
673 		return gtk_cell_area_focus(gtkCellArea, direction) != 0;
674 	}
675 
676 	alias foreac = foreach_;
677 	/**
678 	 * Calls @callback for every `GtkCellRenderer` in @area.
679 	 *
680 	 * Params:
681 	 *     callback = the `GtkCellCallback` to call
682 	 *     callbackData = user provided data pointer
683 	 */
684 	public void foreach_(GtkCellCallback callback, void* callbackData)
685 	{
686 		gtk_cell_area_foreach(gtkCellArea, callback, callbackData);
687 	}
688 
689 	/**
690 	 * Calls @callback for every `GtkCellRenderer` in @area with the
691 	 * allocated rectangle inside @cell_area.
692 	 *
693 	 * Params:
694 	 *     context = the `GtkCellArea`Context for this row of data.
695 	 *     widget = the `GtkWidget` that @area is rendering to
696 	 *     cellArea = the @widget relative coordinates and size for @area
697 	 *     backgroundArea = the @widget relative coordinates of the background area
698 	 *     callback = the `GtkCellAllocCallback` to call
699 	 *     callbackData = user provided data pointer
700 	 */
701 	public void foreachAlloc(CellAreaContext context, Widget widget, GdkRectangle* cellArea, GdkRectangle* backgroundArea, GtkCellAllocCallback callback, void* callbackData)
702 	{
703 		gtk_cell_area_foreach_alloc(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), cellArea, backgroundArea, callback, callbackData);
704 	}
705 
706 	/**
707 	 * Derives the allocation of @renderer inside @area if @area
708 	 * were to be renderered in @cell_area.
709 	 *
710 	 * Params:
711 	 *     context = the `GtkCellArea`Context used to hold sizes for @area.
712 	 *     widget = the `GtkWidget` that @area is rendering on
713 	 *     renderer = the `GtkCellRenderer` to get the allocation for
714 	 *     cellArea = the whole allocated area for @area in @widget
715 	 *         for this row
716 	 *     allocation = where to store the allocation for @renderer
717 	 */
718 	public void getCellAllocation(CellAreaContext context, Widget widget, CellRenderer renderer, GdkRectangle* cellArea, out GdkRectangle allocation)
719 	{
720 		gtk_cell_area_get_cell_allocation(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), (renderer is null) ? null : renderer.getCellRendererStruct(), cellArea, &allocation);
721 	}
722 
723 	/**
724 	 * Gets the `GtkCellRenderer` at @x and @y coordinates inside @area and optionally
725 	 * returns the full cell allocation for it inside @cell_area.
726 	 *
727 	 * Params:
728 	 *     context = the `GtkCellArea`Context used to hold sizes for @area.
729 	 *     widget = the `GtkWidget` that @area is rendering on
730 	 *     cellArea = the whole allocated area for @area in @widget
731 	 *         for this row
732 	 *     x = the x position
733 	 *     y = the y position
734 	 *     allocArea = where to store the inner allocated area of the
735 	 *         returned cell renderer
736 	 *
737 	 * Returns: the `GtkCellRenderer` at @x and @y.
738 	 */
739 	public CellRenderer getCellAtPosition(CellAreaContext context, Widget widget, GdkRectangle* cellArea, int x, int y, out GdkRectangle allocArea)
740 	{
741 		auto __p = gtk_cell_area_get_cell_at_position(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), cellArea, x, y, &allocArea);
742 
743 		if(__p is null)
744 		{
745 			return null;
746 		}
747 
748 		return ObjectG.getDObject!(CellRenderer)(cast(GtkCellRenderer*) __p);
749 	}
750 
751 	/**
752 	 * Gets the current `GtkTreePath` string for the currently
753 	 * applied `GtkTreeIter`, this is implicitly updated when
754 	 * gtk_cell_area_apply_attributes() is called and can be
755 	 * used to interact with renderers from `GtkCellArea`
756 	 * subclasses.
757 	 *
758 	 * Returns: The current `GtkTreePath` string for the current
759 	 *     attributes applied to @area. This string belongs to the area and
760 	 *     should not be freed.
761 	 */
762 	public string getCurrentPathString()
763 	{
764 		return Str.toString(gtk_cell_area_get_current_path_string(gtkCellArea));
765 	}
766 
767 	/**
768 	 * Gets the `GtkCellEditable` widget currently used
769 	 * to edit the currently edited cell.
770 	 *
771 	 * Returns: The currently active `GtkCellEditable` widget
772 	 */
773 	public CellEditableIF getEditWidget()
774 	{
775 		auto __p = gtk_cell_area_get_edit_widget(gtkCellArea);
776 
777 		if(__p is null)
778 		{
779 			return null;
780 		}
781 
782 		return ObjectG.getDObject!(CellEditableIF)(cast(GtkCellEditable*) __p);
783 	}
784 
785 	/**
786 	 * Gets the `GtkCellRenderer` in @area that is currently
787 	 * being edited.
788 	 *
789 	 * Returns: The currently edited `GtkCellRenderer`
790 	 */
791 	public CellRenderer getEditedCell()
792 	{
793 		auto __p = gtk_cell_area_get_edited_cell(gtkCellArea);
794 
795 		if(__p is null)
796 		{
797 			return null;
798 		}
799 
800 		return ObjectG.getDObject!(CellRenderer)(cast(GtkCellRenderer*) __p);
801 	}
802 
803 	/**
804 	 * Retrieves the currently focused cell for @area
805 	 *
806 	 * Returns: the currently focused cell in @area.
807 	 */
808 	public CellRenderer getFocusCell()
809 	{
810 		auto __p = gtk_cell_area_get_focus_cell(gtkCellArea);
811 
812 		if(__p is null)
813 		{
814 			return null;
815 		}
816 
817 		return ObjectG.getDObject!(CellRenderer)(cast(GtkCellRenderer*) __p);
818 	}
819 
820 	/**
821 	 * Gets the `GtkCellRenderer` which is expected to be focusable
822 	 * for which @renderer is, or may be a sibling.
823 	 *
824 	 * This is handy for `GtkCellArea` subclasses when handling events,
825 	 * after determining the renderer at the event location it can
826 	 * then chose to activate the focus cell for which the event
827 	 * cell may have been a sibling.
828 	 *
829 	 * Params:
830 	 *     renderer = the `GtkCellRenderer`
831 	 *
832 	 * Returns: the `GtkCellRenderer`
833 	 *     for which @renderer is a sibling
834 	 */
835 	public CellRenderer getFocusFromSibling(CellRenderer renderer)
836 	{
837 		auto __p = gtk_cell_area_get_focus_from_sibling(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct());
838 
839 		if(__p is null)
840 		{
841 			return null;
842 		}
843 
844 		return ObjectG.getDObject!(CellRenderer)(cast(GtkCellRenderer*) __p);
845 	}
846 
847 	/**
848 	 * Gets the focus sibling cell renderers for @renderer.
849 	 *
850 	 * Params:
851 	 *     renderer = the `GtkCellRenderer` expected to have focus
852 	 *
853 	 * Returns: A `GList` of `GtkCellRenderer`s.
854 	 *     The returned list is internal and should not be freed.
855 	 */
856 	public ListG getFocusSiblings(CellRenderer renderer)
857 	{
858 		auto __p = gtk_cell_area_get_focus_siblings(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct());
859 
860 		if(__p is null)
861 		{
862 			return null;
863 		}
864 
865 		return new ListG(cast(GList*) __p);
866 	}
867 
868 	/**
869 	 * Retrieves a cell area’s initial minimum and natural height.
870 	 *
871 	 * @area will store some geometrical information in @context along the way;
872 	 * when requesting sizes over an arbitrary number of rows, it’s not important
873 	 * to check the @minimum_height and @natural_height of this call but rather to
874 	 * consult gtk_cell_area_context_get_preferred_height() after a series of
875 	 * requests.
876 	 *
877 	 * Params:
878 	 *     context = the `GtkCellArea`Context to perform this request with
879 	 *     widget = the `GtkWidget` where @area will be rendering
880 	 *     minimumHeight = location to store the minimum height
881 	 *     naturalHeight = location to store the natural height
882 	 */
883 	public void getPreferredHeight(CellAreaContext context, Widget widget, out int minimumHeight, out int naturalHeight)
884 	{
885 		gtk_cell_area_get_preferred_height(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), &minimumHeight, &naturalHeight);
886 	}
887 
888 	/**
889 	 * Retrieves a cell area’s minimum and natural height if it would be given
890 	 * the specified @width.
891 	 *
892 	 * @area stores some geometrical information in @context along the way
893 	 * while calling gtk_cell_area_get_preferred_width(). It’s important to
894 	 * perform a series of gtk_cell_area_get_preferred_width() requests with
895 	 * @context first and then call gtk_cell_area_get_preferred_height_for_width()
896 	 * on each cell area individually to get the height for width of each
897 	 * fully requested row.
898 	 *
899 	 * If at some point, the width of a single row changes, it should be
900 	 * requested with gtk_cell_area_get_preferred_width() again and then
901 	 * the full width of the requested rows checked again with
902 	 * gtk_cell_area_context_get_preferred_width().
903 	 *
904 	 * Params:
905 	 *     context = the `GtkCellArea`Context which has already been requested for widths.
906 	 *     widget = the `GtkWidget` where @area will be rendering
907 	 *     width = the width for which to check the height of this area
908 	 *     minimumHeight = location to store the minimum height
909 	 *     naturalHeight = location to store the natural height
910 	 */
911 	public void getPreferredHeightForWidth(CellAreaContext context, Widget widget, int width, out int minimumHeight, out int naturalHeight)
912 	{
913 		gtk_cell_area_get_preferred_height_for_width(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), width, &minimumHeight, &naturalHeight);
914 	}
915 
916 	/**
917 	 * Retrieves a cell area’s initial minimum and natural width.
918 	 *
919 	 * @area will store some geometrical information in @context along the way;
920 	 * when requesting sizes over an arbitrary number of rows, it’s not important
921 	 * to check the @minimum_width and @natural_width of this call but rather to
922 	 * consult gtk_cell_area_context_get_preferred_width() after a series of
923 	 * requests.
924 	 *
925 	 * Params:
926 	 *     context = the `GtkCellArea`Context to perform this request with
927 	 *     widget = the `GtkWidget` where @area will be rendering
928 	 *     minimumWidth = location to store the minimum width
929 	 *     naturalWidth = location to store the natural width
930 	 */
931 	public void getPreferredWidth(CellAreaContext context, Widget widget, out int minimumWidth, out int naturalWidth)
932 	{
933 		gtk_cell_area_get_preferred_width(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), &minimumWidth, &naturalWidth);
934 	}
935 
936 	/**
937 	 * Retrieves a cell area’s minimum and natural width if it would be given
938 	 * the specified @height.
939 	 *
940 	 * @area stores some geometrical information in @context along the way
941 	 * while calling gtk_cell_area_get_preferred_height(). It’s important to
942 	 * perform a series of gtk_cell_area_get_preferred_height() requests with
943 	 * @context first and then call gtk_cell_area_get_preferred_width_for_height()
944 	 * on each cell area individually to get the height for width of each
945 	 * fully requested row.
946 	 *
947 	 * If at some point, the height of a single row changes, it should be
948 	 * requested with gtk_cell_area_get_preferred_height() again and then
949 	 * the full height of the requested rows checked again with
950 	 * gtk_cell_area_context_get_preferred_height().
951 	 *
952 	 * Params:
953 	 *     context = the `GtkCellArea`Context which has already been requested for widths.
954 	 *     widget = the `GtkWidget` where @area will be rendering
955 	 *     height = the height for which to check the width of this area
956 	 *     minimumWidth = location to store the minimum width
957 	 *     naturalWidth = location to store the natural width
958 	 */
959 	public void getPreferredWidthForHeight(CellAreaContext context, Widget widget, int height, out int minimumWidth, out int naturalWidth)
960 	{
961 		gtk_cell_area_get_preferred_width_for_height(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), height, &minimumWidth, &naturalWidth);
962 	}
963 
964 	/**
965 	 * Gets whether the area prefers a height-for-width layout
966 	 * or a width-for-height layout.
967 	 *
968 	 * Returns: The `GtkSizeRequestMode` preferred by @area.
969 	 */
970 	public GtkSizeRequestMode getRequestMode()
971 	{
972 		return gtk_cell_area_get_request_mode(gtkCellArea);
973 	}
974 
975 	/**
976 	 * Checks if @area contains @renderer.
977 	 *
978 	 * Params:
979 	 *     renderer = the `GtkCellRenderer` to check
980 	 *
981 	 * Returns: %TRUE if @renderer is in the @area.
982 	 */
983 	public bool hasRenderer(CellRenderer renderer)
984 	{
985 		return gtk_cell_area_has_renderer(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct()) != 0;
986 	}
987 
988 	/**
989 	 * This is a convenience function for `GtkCellArea` implementations
990 	 * to get the inner area where a given `GtkCellRenderer` will be
991 	 * rendered. It removes any padding previously added by gtk_cell_area_request_renderer().
992 	 *
993 	 * Params:
994 	 *     widget = the `GtkWidget` that @area is rendering onto
995 	 *     cellArea = the @widget relative coordinates where one of @area’s cells
996 	 *         is to be placed
997 	 *     innerArea = the return location for the inner cell area
998 	 */
999 	public void innerCellArea(Widget widget, GdkRectangle* cellArea, out GdkRectangle innerArea)
1000 	{
1001 		gtk_cell_area_inner_cell_area(gtkCellArea, (widget is null) ? null : widget.getWidgetStruct(), cellArea, &innerArea);
1002 	}
1003 
1004 	/**
1005 	 * Returns whether the area can do anything when activated,
1006 	 * after applying new attributes to @area.
1007 	 *
1008 	 * Returns: whether @area can do anything when activated.
1009 	 */
1010 	public bool isActivatable()
1011 	{
1012 		return gtk_cell_area_is_activatable(gtkCellArea) != 0;
1013 	}
1014 
1015 	/**
1016 	 * Returns whether @sibling is one of @renderer’s focus siblings
1017 	 * (see gtk_cell_area_add_focus_sibling()).
1018 	 *
1019 	 * Params:
1020 	 *     renderer = the `GtkCellRenderer` expected to have focus
1021 	 *     sibling = the `GtkCellRenderer` to check against @renderer’s sibling list
1022 	 *
1023 	 * Returns: %TRUE if @sibling is a focus sibling of @renderer
1024 	 */
1025 	public bool isFocusSibling(CellRenderer renderer, CellRenderer sibling)
1026 	{
1027 		return gtk_cell_area_is_focus_sibling(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), (sibling is null) ? null : sibling.getCellRendererStruct()) != 0;
1028 	}
1029 
1030 	/**
1031 	 * Removes @renderer from @area.
1032 	 *
1033 	 * Params:
1034 	 *     renderer = the `GtkCellRenderer` to remove from @area
1035 	 */
1036 	public void remove(CellRenderer renderer)
1037 	{
1038 		gtk_cell_area_remove(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct());
1039 	}
1040 
1041 	/**
1042 	 * Removes @sibling from @renderer’s focus sibling list
1043 	 * (see gtk_cell_area_add_focus_sibling()).
1044 	 *
1045 	 * Params:
1046 	 *     renderer = the `GtkCellRenderer` expected to have focus
1047 	 *     sibling = the `GtkCellRenderer` to remove from @renderer’s focus area
1048 	 */
1049 	public void removeFocusSibling(CellRenderer renderer, CellRenderer sibling)
1050 	{
1051 		gtk_cell_area_remove_focus_sibling(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), (sibling is null) ? null : sibling.getCellRendererStruct());
1052 	}
1053 
1054 	/**
1055 	 * This is a convenience function for `GtkCellArea` implementations
1056 	 * to request size for cell renderers. It’s important to use this
1057 	 * function to request size and then use gtk_cell_area_inner_cell_area()
1058 	 * at render and event time since this function will add padding
1059 	 * around the cell for focus painting.
1060 	 *
1061 	 * Params:
1062 	 *     renderer = the `GtkCellRenderer` to request size for
1063 	 *     orientation = the `GtkOrientation` in which to request size
1064 	 *     widget = the `GtkWidget` that @area is rendering onto
1065 	 *     forSize = the allocation contextual size to request for, or -1 if
1066 	 *         the base request for the orientation is to be returned.
1067 	 *     minimumSize = location to store the minimum size
1068 	 *     naturalSize = location to store the natural size
1069 	 */
1070 	public void requestRenderer(CellRenderer renderer, GtkOrientation orientation, Widget widget, int forSize, out int minimumSize, out int naturalSize)
1071 	{
1072 		gtk_cell_area_request_renderer(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct(), orientation, (widget is null) ? null : widget.getWidgetStruct(), forSize, &minimumSize, &naturalSize);
1073 	}
1074 
1075 	/**
1076 	 * Explicitly sets the currently focused cell to @renderer.
1077 	 *
1078 	 * This is generally called by implementations of
1079 	 * `GtkCellAreaClass.focus()` or `GtkCellAreaClass.event()`,
1080 	 * however it can also be used to implement functions such
1081 	 * as gtk_tree_view_set_cursor_on_cell().
1082 	 *
1083 	 * Params:
1084 	 *     renderer = the `GtkCellRenderer` to give focus to
1085 	 */
1086 	public void setFocusCell(CellRenderer renderer)
1087 	{
1088 		gtk_cell_area_set_focus_cell(gtkCellArea, (renderer is null) ? null : renderer.getCellRendererStruct());
1089 	}
1090 
1091 	/**
1092 	 * Snapshots @area’s cells according to @area’s layout onto at
1093 	 * the given coordinates.
1094 	 *
1095 	 * Params:
1096 	 *     context = the `GtkCellArea`Context for this row of data.
1097 	 *     widget = the `GtkWidget` that @area is rendering to
1098 	 *     snapshot = the `GtkSnapshot` to draw to
1099 	 *     backgroundArea = the @widget relative coordinates for @area’s background
1100 	 *     cellArea = the @widget relative coordinates for @area
1101 	 *     flags = the `GtkCellRenderer`State for @area in this row.
1102 	 *     paintFocus = whether @area should paint focus on focused cells for focused rows or not.
1103 	 */
1104 	public void snapshot(CellAreaContext context, Widget widget, Snapshot snapshot, GdkRectangle* backgroundArea, GdkRectangle* cellArea, GtkCellRendererState flags, bool paintFocus)
1105 	{
1106 		gtk_cell_area_snapshot(gtkCellArea, (context is null) ? null : context.getCellAreaContextStruct(), (widget is null) ? null : widget.getWidgetStruct(), (snapshot is null) ? null : snapshot.getGtkSnapshotStruct(), backgroundArea, cellArea, flags, paintFocus);
1107 	}
1108 
1109 	/**
1110 	 * Explicitly stops the editing of the currently edited cell.
1111 	 *
1112 	 * If @canceled is %TRUE, the currently edited cell renderer
1113 	 * will emit the ::editing-canceled signal, otherwise the
1114 	 * the ::editing-done signal will be emitted on the current
1115 	 * edit widget.
1116 	 *
1117 	 * See gtk_cell_area_get_edited_cell() and gtk_cell_area_get_edit_widget().
1118 	 *
1119 	 * Params:
1120 	 *     canceled = whether editing was canceled.
1121 	 */
1122 	public void stopEditing(bool canceled)
1123 	{
1124 		gtk_cell_area_stop_editing(gtkCellArea, canceled);
1125 	}
1126 
1127 	/**
1128 	 * Indicates that editing has started on @renderer and that @editable
1129 	 * should be added to the owning cell-layouting widget at @cell_area.
1130 	 *
1131 	 * Params:
1132 	 *     renderer = the `GtkCellRenderer` that started the edited
1133 	 *     editable = the `GtkCellEditable` widget to add
1134 	 *     cellArea = the `GtkWidget` relative `GdkRectangle` coordinates
1135 	 *         where @editable should be added
1136 	 *     path = the `GtkTreePath` string this edit was initiated for
1137 	 */
1138 	gulong addOnAddEditable(void delegate(CellRenderer, CellEditableIF, GdkRectangle*, string, CellArea) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)
1139 	{
1140 		return Signals.connect(this, "add-editable", dlg, connectFlags ^ ConnectFlags.SWAPPED);
1141 	}
1142 
1143 	/**
1144 	 * This signal is emitted whenever applying attributes to @area from @model
1145 	 *
1146 	 * Params:
1147 	 *     model = the `GtkTreeModel` to apply the attributes from
1148 	 *     iter = the `GtkTreeIter` indicating which row to apply the attributes of
1149 	 *     isExpander = whether the view shows children for this row
1150 	 *     isExpanded = whether the view is currently showing the children of this row
1151 	 */
1152 	gulong addOnApplyAttributes(void delegate(TreeModelIF, TreeIter, bool, bool, CellArea) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)
1153 	{
1154 		return Signals.connect(this, "apply-attributes", dlg, connectFlags ^ ConnectFlags.SWAPPED);
1155 	}
1156 
1157 	/**
1158 	 * Indicates that focus changed on this @area. This signal
1159 	 * is emitted either as a result of focus handling or event
1160 	 * handling.
1161 	 *
1162 	 * It's possible that the signal is emitted even if the
1163 	 * currently focused renderer did not change, this is
1164 	 * because focus may change to the same renderer in the
1165 	 * same cell area for a different row of data.
1166 	 *
1167 	 * Params:
1168 	 *     renderer = the `GtkCellRenderer` that has focus
1169 	 *     path = the current `GtkTreePath` string set for @area
1170 	 */
1171 	gulong addOnFocusChanged(void delegate(CellRenderer, string, CellArea) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)
1172 	{
1173 		return Signals.connect(this, "focus-changed", dlg, connectFlags ^ ConnectFlags.SWAPPED);
1174 	}
1175 
1176 	/**
1177 	 * Indicates that editing finished on @renderer and that @editable
1178 	 * should be removed from the owning cell-layouting widget.
1179 	 *
1180 	 * Params:
1181 	 *     renderer = the `GtkCellRenderer` that finished editeding
1182 	 *     editable = the `GtkCellEditable` widget to remove
1183 	 */
1184 	gulong addOnRemoveEditable(void delegate(CellRenderer, CellEditableIF, CellArea) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)
1185 	{
1186 		return Signals.connect(this, "remove-editable", dlg, connectFlags ^ ConnectFlags.SWAPPED);
1187 	}
1188 }